<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app"></div>
    <div id="app2"></div>
    <div id="app3"></div>
    <script src="../js/react.development.js"></script>
    <script src="../js/react-dom.development.js"></script>
    <script src="../js/babel.min.js"></script>
    <script src="../js/prop-types.js"></script>
    <script type="text/babel">
        // state demo
        // class MyComponent extends React.Component {
        //     // 初始化state,默认值为null
        //     state = {
        //         name: '米',
        //         age: 18
        //     }
        //     render () {
        //         // 结构state，拿到name，age渲染
        //         const { name, age } = this.state
        //         return (
        //             <div>
        //                 <ul>
        //                     <li>姓名：{name}</li>
        //                     <li>年龄：{age}</li>
        //                 </ul>
        //             </div>
        //         )
        //     }
        // }
        // ReactDOM.render(<MyComponent />, document.getElementById('app'))



        // props  demo
        // class MyComponent extends React.Component {
        //     /*
        //     定义类上的属性，组件实例无法访问（只能通过类本身去访问，react底层会遍历propTypes，defaultProps如果有对参数做一些限制，如果没有则跳过）
        //     propTypes：对传入的参数做一些类型限制
        //     defaultProps：某些参数没传赋一些初始值
        //     */
        //     static propTypes = {
        //         name: PropTypes.string.isRequired,
        //         age: PropTypes.number
        //     }
        //     static defaultProps = {
        //         name: 'defaultName',
        //         age: 10
        //     }
        //     render () {
        //         const { name, age } = this.props
        //         return (
        //             <div>
        //                 <ul>
        //                     <li>姓名：{name}</li>
        //                     <li>性别：{age}</li>
        //                 </ul>
        //             </div>
        //         )
        //     }
        // }
        // ReactDOM.render(<MyComponent />, document.getElementById('app2'))

        // refs demo
        class MyComponent extends React.Component {
            // 字符串形式ref
            // getIptValue = () => {
            //     const { ipt } = this.refs
            //     alert(ipt.value)
            // }

            // 回调函数形式ref
            getIptValue = () => {
                const { ipt } = this
                alert(ipt.value)
            }
            render () {
                return (
                    <div>
                        {/*
                            字符串形式的ref
                            添加ref标签，react会自动收集key-value到this.refs中（有性能问题，react官网不推荐这样写）
                        */}
                        {/*<input ref="ipt" type="text" />*/}
                        {/*<button onClick={this.getIptValue}>点击按钮获取输入框内容</button>*/}

                        {/*
                            回调形式ref
                            ref为回调函数，回调函数参数为当前元素，赋值给组件实例的某个属性（项目中经常使用）
                        */}
                        <input ref={ele => this.ipt = ele} type="text" />
                        <button onClick={this.getIptValue}>点击按钮获取输入框内容</button>
                    </div>
                )
            }
        }
        ReactDOM.render(<MyComponent />, document.getElementById('app3'))
    </script>
</body>

</html>